#include<iostream>
#include <unistd.h>
#include<signal.h>


void PrintPending(const sigset_t &pending)
{
    std::cout << "curr pending list [" << getpid() << "]: " ;
    for(int signo = 31; signo > 0; signo--)
    {
        if(sigismember(&pending, signo))
        {
            std::cout << 1;
        }
        else
        {
            std::cout << 0;
        }
    }
    std::cout << std::endl;
}


int main()
{
    // 1.对2号信号进行屏蔽
    // 栈上开辟的空间
    sigset_t block,oblock;
    sigemptyset(&block);
    sigemptyset(&oblock);

    // 1.1 添加2号信号
    // 此时知识在用户栈上设置了block的位图结构 并没有设置进内核中
    sigaddset(&block,2);

    // 1.2 设置进内核中
    sigprocmask(SIG_SETMASK,&block,&oblock);

    while(true)
    {
        // 获取pending表
        sigset_t pending;
        sigpending(&pending);

        PrintPending(pending);

        sleep(1);
    }

    return 0;
}